<!doctype html><html lang=en-us dir=ltr><head><meta charset=UTF-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content="k8s技术分享 # 工作负载资源 # 一、pod # 1. 概要 # 可创建管理、最小的可部署计算单元，是可以在主机上运行的容器的集合 我们的服务都在其中运行。如我们的服务是nginx，则最内层是我们的服务 nginx，运行在 container 容器当中。container (容器) 的本质是进程，而 pod 是管理这一组进程的资源 所以pod可视为一个极为轻量化、没插网线的电脑，如果所需任务无需交互，那么用pod就很合适。例如给它挂载一个文件来训练模型、生成报表，可以根据场景使用 Job 或者 CronJob 或者其它 图示关系如下 # ![[k8s-pod-insert.png]]
2. pod网络 # 当然，pod 可以管理多个 container，又因为container (容器) 的本质是进程，如果有本地网络通信需求(使用 localhost 或者 Socket 文件进行本地通信)，在这些场景中使用 pod 管理多个 container 就非常的推荐。
如下图展示了Pod网络所依赖的3个网络设备
1. eth0是节点主机上的网卡，支持该节点流量出入的设备、也是支持集群节点间IP寻址和互通的设备；
2. docker0是一个虚拟网桥，可以简单理解为一个虚拟交换机，支持该节点上的Pod之间进行IP寻址和互通的设备；
3. veth0则是Pod1的虚拟网卡，支持该Pod内容器互通和对外访问的虚拟设备；
4. docker0网桥和veth0网卡，都是linux支持和创建的虚拟网络设备；
5. pause属于特殊容器，其运行的唯一目的是为Pod建立共享的veth0网络接口
![[k8s-nginx-pod.png]]
二、deployment、StatefulSet # 1. 概要 # Deployment 使得 Pod 和 ReplicaSet 能够进行声明式更新
StatefulSet 表示一组具有一致身份的 Pod：
1. 身份定义为："><meta name=theme-color content="#FFFFFF"><meta name=color-scheme content="light dark"><meta property="og:title" content="k8s技术分享"><meta property="og:description" content="k8s技术分享 # 工作负载资源 # 一、pod # 1. 概要 # 可创建管理、最小的可部署计算单元，是可以在主机上运行的容器的集合 我们的服务都在其中运行。如我们的服务是nginx，则最内层是我们的服务 nginx，运行在 container 容器当中。container (容器) 的本质是进程，而 pod 是管理这一组进程的资源 所以pod可视为一个极为轻量化、没插网线的电脑，如果所需任务无需交互，那么用pod就很合适。例如给它挂载一个文件来训练模型、生成报表，可以根据场景使用 Job 或者 CronJob 或者其它 图示关系如下 # ![[k8s-pod-insert.png]]
2. pod网络 # 当然，pod 可以管理多个 container，又因为container (容器) 的本质是进程，如果有本地网络通信需求(使用 localhost 或者 Socket 文件进行本地通信)，在这些场景中使用 pod 管理多个 container 就非常的推荐。
如下图展示了Pod网络所依赖的3个网络设备
1. eth0是节点主机上的网卡，支持该节点流量出入的设备、也是支持集群节点间IP寻址和互通的设备；
2. docker0是一个虚拟网桥，可以简单理解为一个虚拟交换机，支持该节点上的Pod之间进行IP寻址和互通的设备；
3. veth0则是Pod1的虚拟网卡，支持该Pod内容器互通和对外访问的虚拟设备；
4. docker0网桥和veth0网卡，都是linux支持和创建的虚拟网络设备；
5. pause属于特殊容器，其运行的唯一目的是为Pod建立共享的veth0网络接口
![[k8s-nginx-pod.png]]
二、deployment、StatefulSet # 1. 概要 # Deployment 使得 Pod 和 ReplicaSet 能够进行声明式更新
StatefulSet 表示一组具有一致身份的 Pod：
1. 身份定义为："><meta property="og:type" content="article"><meta property="og:url" content="http://example.org/docs/programmer/base/k8s-%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/"><meta property="article:section" content="docs"><meta property="article:published_time" content="2023-09-07T20:58:56+00:00"><meta property="article:modified_time" content="2023-09-07T20:58:56+00:00"><title>k8s技术分享 | Ian's Blog</title>
<link rel=manifest href=/manifest.json><link rel=icon href=/favicon.png type=image/x-icon><link rel=stylesheet href=/book.min.c58292d36b18b675680ab9baea2029204537b839ea72f258746ec0f32ce8d6c8.css integrity="sha256-xYKS02sYtnVoCrm66iApIEU3uDnqcvJYdG7A8yzo1sg=" crossorigin=anonymous><script defer src=/flexsearch.min.js></script><script defer src=/en.search.min.569e34257b6d9d9d98bef2eba3a64a9a25f6edeb684dcfd9d09d6515476ff4fa.js integrity="sha256-Vp40JXttnZ2YvvLro6ZKmiX27etoTc/Z0J1lFUdv9Po=" crossorigin=anonymous></script></head><body dir=ltr><input type=checkbox class="hidden toggle" id=menu-control>
<input type=checkbox class="hidden toggle" id=toc-control><main class="container flex"><aside class=book-menu><div class=book-menu-content><nav><h2 class=book-brand><a class="flex align-center" href=/><span>Ian's Blog</span></a></h2><div class=book-search><input type=text id=book-search-input placeholder=Search aria-label=Search maxlength=64 data-hotkeys=s/><div class="book-search-spinner hidden"></div><ul id=book-search-results></ul></div><ul><li class=book-section-flat><a href=/docs/programmer/>程序员笔记</a><ul><li><input type=checkbox id=section-52f633cba5cf47818d8ec01e928396f2 class=toggle checked>
<label for=section-52f633cba5cf47818d8ec01e928396f2 class="flex justify-between"><a role=button>Base</a></label><ul><li><a href=/docs/programmer/base/k8s-%E9%85%8D%E5%A5%97%E8%AF%B4%E6%98%8E/>k8s 配套说明</a></li><li><a href=/docs/programmer/base/k8s-%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/ class=active>k8s技术分享</a></li><li><a href=/docs/programmer/base/k8s%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%E5%92%8C%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E8%A7%A3%E6%9E%90/>k8s学习-常用命令和配置文件</a></li><li><a href=/docs/programmer/base/pypi/>PyPi</a></li><li><a href=/docs/programmer/base/tipsofweb/>Nginx高可用</a></li><li><a href=/docs/programmer/base/for_china/>各个软件换源</a></li><li><a href=/docs/programmer/base/tipsofdebugers/>tips Of Debuggers</a></li><li><a href=/docs/programmer/base/notesdjango/>Django的建站的(｡･･)ﾉﾞ</a></li><li><a href=/docs/programmer/base/tipsofvim/>tip Of vim</a></li><li><a href=/docs/programmer/base/editer/>编辑器使用</a></li><li><a href=/docs/programmer/base/noteoflinux/>Linux</a></li><li><a href=/docs/programmer/base/argo-workflow%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95%E5%92%8C%E4%BD%BF%E7%94%A8%E5%9C%BA%E6%99%AF%E5%88%86%E6%9E%90/>Argo Workflow性能测试和使用场景分析</a></li><li><a href=/docs/programmer/base/argo-%E4%BD%BF%E7%94%A8%E8%AE%B0%E5%BD%95/>Argo 使用记录</a></li><li><a href=/docs/programmer/base/kafka-%E5%AE%89%E8%A3%85%E5%92%8C%E4%BD%BF%E7%94%A8/>Kafka 安装和使用</a></li><li><a href=/docs/programmer/base/paramiko-%E4%BD%BF%E7%94%A8-sshsftp/>Paramiko 使用 Ssh&amp;sftp</a></li><li><a href=/docs/programmer/base/pytest-%E6%B5%8B%E8%AF%95/>Py Test 测试</a></li><li><a href=/docs/programmer/base/sonar-%E4%BB%A3%E7%A0%81%E9%9D%99%E6%80%81%E6%A3%80%E6%9F%A5/>Sonar 代码静态检查</a></li><li><a href=/docs/programmer/base/%E5%B0%8F%E5%91%BD%E4%BB%A4/>小命令</a></li><li><a href=/docs/programmer/base/tip_dgraph/>Dgraph</a></li><li><a href=/docs/programmer/base/noteoffmtdata/>数据格式笔记</a></li></ul></li><li><input type=checkbox id=section-de7bfad1d124522974cdf8addfbb23f2 class=toggle>
<label for=section-de7bfad1d124522974cdf8addfbb23f2 class="flex justify-between"><a role=button>Net</a></label><ul><li><a href=/docs/programmer/net/uwsgi-%E5%A4%84%E7%90%86%E8%AE%B0%E5%BD%95/>uwsgi 处理记录</a></li><li><a href=/docs/programmer/net/tipsofgrpc/>gRpc使用小记</a></li><li><a href=/docs/programmer/net/net/>网络(Computer Network)</a></li><li><a href=/docs/programmer/net/elk%E5%9C%A8k8s%E4%B8%8A%E7%9A%84%E9%83%A8%E7%BD%B2%E4%BD%BF%E7%94%A8%E7%A4%BA%E4%BE%8B/>Elk在k8s上的部署使用示例</a></li><li><a href=/docs/programmer/net/nginx%E5%AE%9E%E7%94%A8%E9%85%8D%E7%BD%AE/>Nginx实用配置</a></li></ul></li><li><input type=checkbox id=section-bf4e0d6f0b81f7b3ec08ed1fc66b874d class=toggle>
<label for=section-bf4e0d6f0b81f7b3ec08ed1fc66b874d class="flex justify-between"><a role=button>Langs</a></label><ul><li><a href=/docs/programmer/langs/cmake/>CMake 使用Tips</a></li><li><a href=/docs/programmer/langs/noteofgoexp/>Golang进阶笔记</a></li><li><a href=/docs/programmer/langs/noteofgolang/>Golang笔记</a></li><li><a href=/docs/programmer/langs/tipsofmarkdown/>tips Of markdown</a></li><li><a href=/docs/programmer/langs/notespython/>Python笔记(notes of Python)</a></li><li><a href=/docs/programmer/langs/notesjava/>愉快的Java(happy to learn the fuck java)</a></li></ul></li><li><input type=checkbox id=section-cd029da01a5cf373a5379dc078a74f2c class=toggle>
<label for=section-cd029da01a5cf373a5379dc078a74f2c class="flex justify-between"><a role=button>Game and Simulation</a></label><ul><li><a href=/docs/programmer/game_and_simulation/blender/>Blender</a></li><li><a href=/docs/programmer/game_and_simulation/noteofue4/>UE4 笔记</a></li></ul></li><li><input type=checkbox id=section-883e27361d38e16afb68faff3435ac0b class=toggle>
<label for=section-883e27361d38e16afb68faff3435ac0b class="flex justify-between"><a role=button>Ml</a></label><ul><li><a href=/docs/programmer/ml/tensorflow/>Tensorflow</a></li><li><a href=/docs/programmer/ml/opencv/>OpenCV</a></li><li><a href=/docs/programmer/ml/paddle/>Paddle</a></li><li><a href=/docs/programmer/ml/noteofmachinelearning/>机器学习库</a></li></ul></li><li><input type=checkbox id=section-7e5360c5e7954906b897ed79085884b6 class=toggle>
<label for=section-7e5360c5e7954906b897ed79085884b6 class="flex justify-between"><a href=/docs/programmer/gui/>Gui</a></label><ul><li><a href=/docs/programmer/gui/pyinstaller/>python打包</a></li><li><a href=/docs/programmer/gui/qt/>Qt/PySide</a></li><li><a href=/docs/programmer/gui/noteofvn_py/>Vn.Py学习笔记（Python交易平台框架）</a></li><li><a href=/docs/programmer/gui/notespython/>图形化界面 （Python Gui）</a></li></ul></li><li><input type=checkbox id=section-4446dd07527142b855f26d7cc8f0e617 class=toggle>
<label for=section-4446dd07527142b855f26d7cc8f0e617 class="flex justify-between"><a role=button>Database</a></label><ul><li><a href=/docs/programmer/database/dgraph/>Dgraph使用小记</a></li><li><a href=/docs/programmer/database/noteofdocker/>notes Of docker</a></li><li><a href=/docs/programmer/database/noteofdbdata/>db数据库</a></li><li><a href=/docs/programmer/database/mongodb/>Mongodb</a></li></ul></li><li><input type=checkbox id=section-d325c59fc6513e1b1e05a60b192d4973 class=toggle>
<label for=section-d325c59fc6513e1b1e05a60b192d4973 class="flex justify-between"><a href=/docs/programmer/hardware/>Hardware</a></label><ul><li><a href=/docs/programmer/hardware/android/>Android</a></li><li><a href=/docs/programmer/hardware/raspberrypi/>Raspberry Pi</a></li><li><a href=/docs/programmer/hardware/readme/>Readme</a></li><li><a href=/docs/programmer/hardware/screen/>Screen</a></li></ul></li><li><input type=checkbox id=section-40d35e91afa620ff2e7bf6291cfb3e1d class=toggle>
<label for=section-40d35e91afa620ff2e7bf6291cfb3e1d class="flex justify-between"><a href=/docs/programmer/software/>Software</a></label><ul><li><a href=/docs/programmer/software/bash/>Bash</a></li><li><a href=/docs/programmer/software/freebsd/>Freebsd</a></li><li><a href=/docs/programmer/software/gitbook/>Gitbook</a></li><li><a href=/docs/programmer/software/markdown/>Markdown</a></li><li><a href=/docs/programmer/software/npm/>Npm</a></li><li><a href=/docs/programmer/software/readme/>Readme</a></li><li><a href=/docs/programmer/software/vim/>Vim</a></li></ul></li><li><a href=/docs/programmer/install_some/>安装问题</a></li><li><a href=/docs/programmer/demo_test_some/>Demo Test项目中的一些东西</a></li><li><a href=/docs/programmer/tipsofproblems/>解决问题</a></li></ul></li><li class=book-section-flat><a href=/docs/example/>Hugo特殊Markdown语法说明</a><ul><li><a href=/docs/example/table-of-contents/>Table of Contents</a><ul><li><a href=/docs/example/table-of-contents/with-toc/>With ToC</a></li><li><a href=/docs/example/table-of-contents/without-toc/>Without ToC</a></li></ul></li><li class=book-section-flat><span>Shortcodes</span><ul><li><a href=/docs/example/shortcodes/buttons/>Buttons</a></li><li><a href=/docs/example/shortcodes/columns/>Columns</a></li><li><a href=/docs/example/shortcodes/details/>Details</a></li><li><a href=/docs/example/shortcodes/expand/>Expand</a></li><li><a href=/docs/example/shortcodes/hints/>Hints</a></li><li><input type=checkbox id=section-1c6a8516f710b6065a114907cef8489f class=toggle>
<label for=section-1c6a8516f710b6065a114907cef8489f class="flex justify-between"><a href=/docs/example/shortcodes/section/>Section</a></label><ul><li><a href=/docs/example/shortcodes/section/first-page/>First Page</a></li><li><a href=/docs/example/shortcodes/section/second-page/>Second Page</a></li></ul></li><li><a href=/docs/example/shortcodes/tabs/>Tabs</a></li></ul></li></ul></li></ul><ul><li><a href=/posts/>Blog</a></li></ul></nav><script>(function(){var e=document.querySelector("aside .book-menu-content");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script></div></aside><div class=book-page><header class=book-header><div class="flex align-center justify-between"><label for=menu-control><img src=/svg/menu.svg class=book-icon alt=Menu>
</label><strong>k8s技术分享</strong>
<label for=toc-control><img src=/svg/toc.svg class=book-icon alt="Table of Contents"></label></div><aside class="hidden clearfix"><nav id=TableOfContents><ul><li><a href=#一podhttpskubernetesiozh-cndocsreferencekubernetes-apiworkload-resourcespod-v1>一、<a href=https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/workload-resources/pod-v1/>pod</a></a><ul><li><a href=#1-概要>1. 概要</a></li><li><a href=#图示关系如下>图示关系如下</a></li><li><a href=#2-pod网络>2. pod网络</a></li></ul></li><li><a href=#二deploymenthttpskubernetesiozh-cndocsreferencekubernetes-apiworkload-resourcesdeployment-v1statefulsethttpskubernetesiozh-cndocsreferencekubernetes-apiworkload-resourcesstateful-set-v1>二、<a href=https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/workload-resources/deployment-v1/>deployment</a>、<a href=https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/workload-resources/stateful-set-v1/>StatefulSet</a></a><ul><li><a href=#1-概要-1>1. 概要</a></li><li><a href=#2-滚动升级>2. 滚动升级</a></li><li><a href=#3-分界线>3. 分界线</a></li></ul></li></ul><ul><li><a href=#servicehttpskubernetesiozh-cndocsreferencekubernetes-apiservice-resourcesservice-v1ingresshttpskubernetesiozh-cndocsreferencekubernetes-apiservice-resourcesingress-v1><a href=https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/service-resources/service-v1/>Service</a>、<a href=https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/service-resources/ingress-v1/>Ingress</a></a><ul><li><a href=#1-概要-2>1. 概要</a></li><li><a href=#2-service网络原理>2. Service网络原理</a></li></ul></li></ul><ul><li><ul><li><a href=#nodeport-负载均衡略>NodePort (负载均衡(略))</a></li></ul></li></ul></nav></aside></header><article class=markdown><h1 id=k8s技术分享>k8s技术分享
<a class=anchor href=#k8s%e6%8a%80%e6%9c%af%e5%88%86%e4%ba%ab>#</a></h1><h1 id=工作负载资源>工作负载资源
<a class=anchor href=#%e5%b7%a5%e4%bd%9c%e8%b4%9f%e8%bd%bd%e8%b5%84%e6%ba%90>#</a></h1><h2 id=一podhttpskubernetesiozh-cndocsreferencekubernetes-apiworkload-resourcespod-v1>一、<a href=https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/workload-resources/pod-v1/>pod</a>
<a class=anchor href=#%e4%b8%80podhttpskubernetesiozh-cndocsreferencekubernetes-apiworkload-resourcespod-v1>#</a></h2><h3 id=1-概要>1. 概要
<a class=anchor href=#1-%e6%a6%82%e8%a6%81>#</a></h3><ol><li>可创建管理、最小的可部署计算单元，是可以在主机上运行的容器的集合</li><li>我们的服务都在其中运行。如我们的服务是nginx，则最内层是我们的服务 <code>nginx</code>，运行在 <code>container</code> 容器当中。<code>container</code> (容器) 的本质是进程，而 <code>pod</code> 是管理这一组进程的资源</li><li>所以pod可视为一个极为轻量化、没插网线的电脑，如果所需任务无需交互，那么用pod就很合适。例如给它挂载一个文件来训练模型、生成报表，可以根据场景使用 <a href=https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/workload-resources/job-v1/>Job</a> 或者 <a href=https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/workload-resources/cron-job-v1/>CronJob</a> 或者其它</li></ol><h3 id=图示关系如下>图示关系如下
<a class=anchor href=#%e5%9b%be%e7%a4%ba%e5%85%b3%e7%b3%bb%e5%a6%82%e4%b8%8b>#</a></h3><p>![[k8s-pod-insert.png]]</p><h3 id=2-pod网络>2. pod网络
<a class=anchor href=#2-pod%e7%bd%91%e7%bb%9c>#</a></h3><ol><li><p>当然，<code>pod</code> 可以管理多个 <code>container</code>，又因为<code>container</code> (容器) 的本质是进程，如果有本地网络通信需求(使用 localhost 或者 Socket 文件进行本地通信)，在这些场景中使用 <code>pod</code> 管理多个 <code>container</code> 就非常的推荐。</p></li><li><p>如下图展示了Pod网络所依赖的3个网络设备</p></li></ol><p>    1. eth0是节点主机上的网卡，支持该节点流量出入的设备、也是支持集群节点间IP寻址和互通的设备；</p><p>    2. docker0是一个虚拟网桥，可以简单理解为一个虚拟交换机，支持该节点上的Pod之间进行IP寻址和互通的设备；</p><p>    3. veth0则是Pod1的虚拟网卡，支持该Pod内容器互通和对外访问的虚拟设备；</p><p>    4. docker0网桥和veth0网卡，都是linux支持和创建的虚拟网络设备；</p><p>    5. pause属于特殊容器，其运行的唯一目的是为Pod建立共享的veth0网络接口</p><p>![[k8s-nginx-pod.png]]</p><h2 id=二deploymenthttpskubernetesiozh-cndocsreferencekubernetes-apiworkload-resourcesdeployment-v1statefulsethttpskubernetesiozh-cndocsreferencekubernetes-apiworkload-resourcesstateful-set-v1>二、<a href=https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/workload-resources/deployment-v1/>deployment</a>、<a href=https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/workload-resources/stateful-set-v1/>StatefulSet</a>
<a class=anchor href=#%e4%ba%8cdeploymenthttpskubernetesiozh-cndocsreferencekubernetes-apiworkload-resourcesdeployment-v1statefulsethttpskubernetesiozh-cndocsreferencekubernetes-apiworkload-resourcesstateful-set-v1>#</a></h2><h3 id=1-概要-1>1. 概要
<a class=anchor href=#1-%e6%a6%82%e8%a6%81-1>#</a></h3><ol><li><p>Deployment 使得 Pod 和 ReplicaSet 能够进行声明式更新</p></li><li><p>StatefulSet 表示一组具有一致身份的 Pod：</p></li></ol><p>    1. 身份定义为：</p><p>        - 网络：一个稳定的 DNS 和主机名。</p><p>        - 存储：根据要求提供尽可能多的 VolumeClaim。</p><p>        StatefulSet 保证给定的网络身份将始终映射到相同的存储身份。</p><p>        虽然pod完全具备在生产环境中部署独立的单体服务的能力，但在生产环境中，我们基本上不会直接管理 <code>pod</code>，我们会使用<code>deployment</code> 代为控管。延续上面的比喻就是将 <code>deployment</code> 视为一个好用的机房管理员：帮助我们进货，对pod进行开关机，对pod做系统升级和重装系统以实现功能升级和回滚。 <code>StatefulSet</code> 也相同，只不过每次它会保证一致性，而不像<code>deployment</code> 每次重启都是随机分配</p><h3 id=2-滚动升级>2. 滚动升级
<a class=anchor href=#2-%e6%bb%9a%e5%8a%a8%e5%8d%87%e7%ba%a7>#</a></h3><p>至于为什么需要 <code>deployment</code> 协助我们管理，可以参考下图了解一下滚动升级的流程，并想象一下自己手动操作pod的复杂度（使用 <code>kubectl get pods --watch</code> 可在终端中查看pod变化）：
![[k8s-pod-rollupdate.png]]</p><h3 id=3-分界线>3. 分界线
<a class=anchor href=#3-%e5%88%86%e7%95%8c%e7%ba%bf>#</a></h3><p>        了解完以上信息就已经足够覆盖大多数开发需求，就如去网吧玩游戏、来公司上班，我们都不会去关注网络，而只关心游戏是否流畅输赢，工作进度是否顺畅。因为各个服务间的网络依赖就应该长久保持稳定，不宜做高频调整。除非出现问题，或者恰好我们需要重头搭建这部分，那么我们首先需要考虑的就是网络关系。</p><h1 id=service资源>Service资源
<a class=anchor href=#service%e8%b5%84%e6%ba%90>#</a></h1><h2 id=servicehttpskubernetesiozh-cndocsreferencekubernetes-apiservice-resourcesservice-v1ingresshttpskubernetesiozh-cndocsreferencekubernetes-apiservice-resourcesingress-v1><a href=https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/service-resources/service-v1/>Service</a>、<a href=https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/service-resources/ingress-v1/>Ingress</a>
<a class=anchor href=#servicehttpskubernetesiozh-cndocsreferencekubernetes-apiservice-resourcesservice-v1ingresshttpskubernetesiozh-cndocsreferencekubernetes-apiservice-resourcesingress-v1>#</a></h2><h3 id=1-概要-2>1. 概要
<a class=anchor href=#1-%e6%a6%82%e8%a6%81-2>#</a></h3><ol><li>Service 是软件服务（例如 mysql）的命名抽象，包含代理要侦听的本地端口（例如 3306）和一个选择算符，选择算符用来确定哪些 Pod 将响应通过代理发送的请求。</li><li>Ingress 是允许入站连接到达后端定义的端点的规则集合。Ingress 是允许入站连接到达后端定义的端点的规则集合。</li></ol><p>        <code>Service</code> 就相当于给上述pod组成的服务插上了一条稳定的网线（当然不仅如此），使之可以通过网络通信，而 <code>Ingress</code> 则负责对外，相当于之前的web部署方案中 <code>nginx</code> 扮演的角色，将外部调用通过规则，将请求转发到相应的 <code>Service</code> 上。</p><h3 id=2-service网络原理>2. Service网络原理
<a class=anchor href=#2-service%e7%bd%91%e7%bb%9c%e5%8e%9f%e7%90%86>#</a></h3><p>        首先我们熟悉DNS，再者我们知道通过 <code>deployment</code> 管理的pod每次重启都是重新生成、重新分配网络的，最后我们知道k8s是有一个</p><h1 id=配置和存储资源>配置和存储资源
<a class=anchor href=#%e9%85%8d%e7%bd%ae%e5%92%8c%e5%ad%98%e5%82%a8%e8%b5%84%e6%ba%90>#</a></h1><p><a href=https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/config-and-storage-resources/config-map-v1/>ConfigMap</a>、<a href=https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/config-and-storage-resources/secret-v1/>Secret</a>、<a href=https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/config-and-storage-resources/volume/>Volume</a></p><h1 id=身份认证资源>身份认证资源
<a class=anchor href=#%e8%ba%ab%e4%bb%bd%e8%ae%a4%e8%af%81%e8%b5%84%e6%ba%90>#</a></h1><p><a href=https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/authentication-resources/service-account-v1/>ServiceAccount</a></p><h1 id=鉴权资源>鉴权资源
<a class=anchor href=#%e9%89%b4%e6%9d%83%e8%b5%84%e6%ba%90>#</a></h1><p><a href=https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/authorization-resources/cluster-role-v1/>ClusterRole</a>、<a href=https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/authorization-resources/cluster-role-binding-v1/>ClusterRoleBinding</a></p><h1 id=其他>其他
<a class=anchor href=#%e5%85%b6%e4%bb%96>#</a></h1><ol><li><p><a href=https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/policy-resources/limit-range-v1/>LimitRange</a>、<a href=https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/policy-resources/network-policy-v1/>NetworkPolicy</a></p></li><li><p><a href=https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/cluster-resources/node-v1/>Node</a>、<a href=https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/cluster-resources/namespace-v1/>Namespace</a></p></li></ol><h1 id=网络>网络
<a class=anchor href=#%e7%bd%91%e7%bb%9c>#</a></h1><p><strong>深入理解k8s 网络：</strong><a href=https://www.jianshu.com/p/80eb2e9e32db>https://www.jianshu.com/p/80eb2e9e32db</a></p><h1 id=示意图>示意图
<a class=anchor href=#%e7%a4%ba%e6%84%8f%e5%9b%be>#</a></h1><p>来源https://github.com/guangzhengli/k8s-tutorials</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-jsx data-lang=jsx><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#a6e22e>kubectl</span> <span style=color:#a6e22e>get</span> <span style=color:#a6e22e>pods</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#960050;background-color:#1e0010>#</span> <span style=color:#a6e22e>NAME</span>                                   <span style=color:#a6e22e>READY</span>   <span style=color:#a6e22e>STATUS</span>    <span style=color:#a6e22e>RESTARTS</span>   <span style=color:#a6e22e>AGE</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#960050;background-color:#1e0010>#</span> <span style=color:#a6e22e>hellok8s</span><span style=color:#f92672>-</span><span style=color:#a6e22e>deployment</span><span style=color:#f92672>-</span><span style=color:#ae81ff>5</span><span style=color:#a6e22e>d5545b69c</span><span style=color:#f92672>-</span><span style=color:#ae81ff>24</span><span style=color:#a6e22e>lw5</span>   <span style=color:#ae81ff>1</span><span style=color:#f92672>/</span><span style=color:#ae81ff>1</span>     <span style=color:#a6e22e>Running</span>   <span style=color:#ae81ff>0</span>          <span style=color:#ae81ff>27</span><span style=color:#a6e22e>m</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#960050;background-color:#1e0010>#</span> <span style=color:#a6e22e>hellok8s</span><span style=color:#f92672>-</span><span style=color:#a6e22e>deployment</span><span style=color:#f92672>-</span><span style=color:#ae81ff>5</span><span style=color:#a6e22e>d5545b69c</span><span style=color:#f92672>-</span><span style=color:#ae81ff>9</span><span style=color:#a6e22e>g94t</span>   <span style=color:#ae81ff>1</span><span style=color:#f92672>/</span><span style=color:#ae81ff>1</span>     <span style=color:#a6e22e>Running</span>   <span style=color:#ae81ff>0</span>          <span style=color:#ae81ff>27</span><span style=color:#a6e22e>m</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#960050;background-color:#1e0010>#</span> <span style=color:#a6e22e>hellok8s</span><span style=color:#f92672>-</span><span style=color:#a6e22e>deployment</span><span style=color:#f92672>-</span><span style=color:#ae81ff>5</span><span style=color:#a6e22e>d5545b69c</span><span style=color:#f92672>-</span><span style=color:#ae81ff>9</span><span style=color:#a6e22e>gm8r</span>   <span style=color:#ae81ff>1</span><span style=color:#f92672>/</span><span style=color:#ae81ff>1</span>     <span style=color:#a6e22e>Running</span>   <span style=color:#ae81ff>0</span>          <span style=color:#ae81ff>27</span><span style=color:#a6e22e>m</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#960050;background-color:#1e0010>#</span> <span style=color:#a6e22e>nginx</span>                                  <span style=color:#ae81ff>1</span><span style=color:#f92672>/</span><span style=color:#ae81ff>1</span>     <span style=color:#a6e22e>Running</span>   <span style=color:#ae81ff>0</span>          <span style=color:#ae81ff>41</span><span style=color:#a6e22e>m</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>  
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#a6e22e>kubectl</span> <span style=color:#a6e22e>get</span> <span style=color:#a6e22e>service</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#960050;background-color:#1e0010>#</span> <span style=color:#a6e22e>NAME</span>                         <span style=color:#a6e22e>TYPE</span>        <span style=color:#a6e22e>CLUSTER</span><span style=color:#f92672>-</span><span style=color:#a6e22e>IP</span>      <span style=color:#a6e22e>EXTERNAL</span><span style=color:#f92672>-</span><span style=color:#a6e22e>IP</span>   <span style=color:#a6e22e>PORT</span>(<span style=color:#a6e22e>S</span>)    <span style=color:#a6e22e>AGE</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#960050;background-color:#1e0010>#</span> <span style=color:#a6e22e>service</span><span style=color:#f92672>-</span><span style=color:#a6e22e>hellok8s</span><span style=color:#f92672>-</span><span style=color:#a6e22e>clusterip</span>   <span style=color:#a6e22e>ClusterIP</span>   <span style=color:#ae81ff>10.104.96.153</span>   &lt;<span style=color:#f92672>none</span>&gt;        <span style=color:#ae81ff>3000</span><span style=color:#f92672>/</span><span style=color:#a6e22e>TCP</span>   <span style=color:#ae81ff>10</span><span style=color:#a6e22e>s</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>  
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#a6e22e>kubectl</span> <span style=color:#a6e22e>exec</span> <span style=color:#f92672>-</span><span style=color:#a6e22e>it</span> <span style=color:#a6e22e>nginx</span><span style=color:#f92672>-</span><span style=color:#a6e22e>pod</span> <span style=color:#f92672>/</span><span style=color:#a6e22e>bin</span><span style=color:#f92672>/</span><span style=color:#a6e22e>bash</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#960050;background-color:#1e0010>#</span> <span style=color:#a6e22e>root</span><span style=color:#960050;background-color:#1e0010>@</span><span style=color:#a6e22e>nginx</span><span style=color:#f92672>-</span><span style=color:#a6e22e>pod</span><span style=color:#f92672>:</span><span style=color:#960050;background-color:#1e0010>/# curl 10.104.96.153:3000</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#960050;background-color:#1e0010>#</span> [<span style=color:#a6e22e>v3</span>] <span style=color:#a6e22e>Hello</span>, <span style=color:#a6e22e>Kubernetes</span><span style=color:#f92672>!</span>, <span style=color:#a6e22e>From</span> <span style=color:#a6e22e>host</span><span style=color:#f92672>:</span> <span style=color:#a6e22e>hellok8s</span><span style=color:#f92672>-</span><span style=color:#a6e22e>deployment</span><span style=color:#f92672>-</span><span style=color:#ae81ff>5</span><span style=color:#a6e22e>d5545b69c</span><span style=color:#f92672>-</span><span style=color:#ae81ff>9</span><span style=color:#a6e22e>gm8r</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#960050;background-color:#1e0010>#</span> <span style=color:#a6e22e>root</span><span style=color:#960050;background-color:#1e0010>@</span><span style=color:#a6e22e>nginx</span><span style=color:#f92672>-</span><span style=color:#a6e22e>pod</span><span style=color:#f92672>:</span><span style=color:#960050;background-color:#1e0010>/# curl 10.104.96.153:3000</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#960050;background-color:#1e0010>#</span>[<span style=color:#a6e22e>v3</span>] <span style=color:#a6e22e>Hello</span>, <span style=color:#a6e22e>Kubernetes</span><span style=color:#f92672>!</span>, <span style=color:#a6e22e>From</span> <span style=color:#a6e22e>host</span><span style=color:#f92672>:</span> <span style=color:#a6e22e>hellok8s</span><span style=color:#f92672>-</span><span style=color:#a6e22e>deployment</span><span style=color:#f92672>-</span><span style=color:#ae81ff>5</span><span style=color:#a6e22e>d5545b69c</span><span style=color:#f92672>-</span><span style=color:#ae81ff>9</span><span style=color:#a6e22e>g94t</span>
</span></span></code></pre></div><p>可以看到，我们多次 <code>curl 10.104.96.153:3000</code> 访问 <code>hellok8s</code> Service IP 地址，返回的 <code>hellok8s:v3</code> <code>hostname</code> 不一样，说明 Service 可以接收请求并将它们传递给它后面的所有 pod，还可以自动负载均衡。你也可以试试增加或者减少 <code>hellok8s:v3</code> pod 副本数量，观察 Service 的请求是否会动态变更。调用过程如下图所示：</p><h3 id=nodeport-负载均衡略>NodePort (负载均衡(略))
<a class=anchor href=#nodeport-%e8%b4%9f%e8%bd%bd%e5%9d%87%e8%a1%a1%e7%95%a5>#</a></h3><p>我们知道<code>kubernetes</code> 集群并不是单机运行，它管理着多台节点即 <a href=https://kubernetes.io/docs/concepts/architecture/nodes/>Node</a>，可以通过每个节点上的 IP 和静态端口（<code>NodePort</code>）暴露服务。如下图所示，如果集群内有两台 Node 运行着 <code>hellok8s:v3</code>，我们创建一个 <code>NodePort</code> 类型的 Service，将 <code>hellok8s:v3</code> 的 <code>3000</code> 端口映射到 Node 机器的 <code>30000</code> 端口 (在 30000-32767 范围内)，就可以通过访问 <code>http://node1-ip:30000</code> 或者 <code>http://node2-ip:30000</code> 访问到服务。
![[k8s-svc-nodeport.png]]</p><p>Ingress
![[k8s-ingress.png]]</p></article><footer class=book-footer><div class="flex flex-wrap justify-between"></div><script>(function(){function e(e){const t=window.getSelection(),n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n)}document.querySelectorAll("pre code").forEach(t=>{t.addEventListener("click",function(){if(window.getSelection().toString())return;e(t.parentElement),navigator.clipboard&&navigator.clipboard.writeText(t.parentElement.textContent)})})})()</script></footer><div class=book-comments></div><label for=menu-control class="hidden book-menu-overlay"></label></div><aside class=book-toc><div class=book-toc-content><nav id=TableOfContents><ul><li><a href=#一podhttpskubernetesiozh-cndocsreferencekubernetes-apiworkload-resourcespod-v1>一、<a href=https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/workload-resources/pod-v1/>pod</a></a><ul><li><a href=#1-概要>1. 概要</a></li><li><a href=#图示关系如下>图示关系如下</a></li><li><a href=#2-pod网络>2. pod网络</a></li></ul></li><li><a href=#二deploymenthttpskubernetesiozh-cndocsreferencekubernetes-apiworkload-resourcesdeployment-v1statefulsethttpskubernetesiozh-cndocsreferencekubernetes-apiworkload-resourcesstateful-set-v1>二、<a href=https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/workload-resources/deployment-v1/>deployment</a>、<a href=https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/workload-resources/stateful-set-v1/>StatefulSet</a></a><ul><li><a href=#1-概要-1>1. 概要</a></li><li><a href=#2-滚动升级>2. 滚动升级</a></li><li><a href=#3-分界线>3. 分界线</a></li></ul></li></ul><ul><li><a href=#servicehttpskubernetesiozh-cndocsreferencekubernetes-apiservice-resourcesservice-v1ingresshttpskubernetesiozh-cndocsreferencekubernetes-apiservice-resourcesingress-v1><a href=https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/service-resources/service-v1/>Service</a>、<a href=https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/service-resources/ingress-v1/>Ingress</a></a><ul><li><a href=#1-概要-2>1. 概要</a></li><li><a href=#2-service网络原理>2. Service网络原理</a></li></ul></li></ul><ul><li><ul><li><a href=#nodeport-负载均衡略>NodePort (负载均衡(略))</a></li></ul></li></ul></nav></div></aside></main></body></html>